---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.12.0
  labels:
    cluster.x-k8s.io/provider: cluster-api
  name: machines.cluster.x-k8s.io
spec:
  group: cluster.x-k8s.io
  names:
    categories:
      - cluster-api
    kind: Machine
    listKind: MachineList
    plural: machines
    singular: machine
  scope: Namespaced
  versions:
    - additionalPrinterColumns:
        - description: Cluster
          jsonPath: .spec.clusterName
          name: Cluster
          type: string
        - description: Node name associated with this machine
          jsonPath: .status.nodeRef.name
          name: NodeName
          type: string
        - description: Provider ID
          jsonPath: .spec.providerID
          name: ProviderID
          type: string
        - description: Machine status such as Terminating/Pending/Running/Failed etc
          jsonPath: .status.phase
          name: Phase
          type: string
        - description: Time duration since creation of Machine
          jsonPath: .metadata.creationTimestamp
          name: Age
          type: date
        - description: Kubernetes version associated with this Machine
          jsonPath: .spec.version
          name: Version
          type: string
      name: v1beta1
      schema:
        openAPIV3Schema:
          description: Machine is the Schema for the machines API.
          properties:
            apiVersion:
              description: 'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
              type: string
            kind:
              description: 'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
              type: string
            metadata:
              type: object
            spec:
              description: MachineSpec defines the desired state of Machine.
              properties:
                bootstrap:
                  description: Bootstrap is a reference to a local struct which encapsulates
                    fields to configure the Machine’s bootstrapping mechanism.
                  properties:
                    configRef:
                      description: ConfigRef is a reference to a bootstrap provider-specific
                        resource that holds configuration details. The reference is
                        optional to allow users/operators to specify Bootstrap.DataSecretName
                        without the need of a controller.
                      properties:
                        apiVersion:
                          description: API version of the referent.
                          type: string
                        fieldPath:
                          description: 'If referring to a piece of an object instead
                          of an entire object, this string should contain a valid
                          JSON/Go field access statement, such as desiredState.manifest.containers[2].
                          For example, if the object reference is to a container within
                          a pod, this would take on a value like: "spec.containers{name}"
                          (where "name" refers to the name of the container that triggered
                          the event) or if no container name is specified "spec.containers[2]"
                          (container with index 2 in this pod). This syntax is chosen
                          only to have some well-defined way of referencing a part
                          of an object. TODO: this design is not final and this field
                          is subject to change in the future.'
                          type: string
                        kind:
                          description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                          type: string
                        name:
                          description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                          type: string
                        namespace:
                          description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
                          type: string
                        resourceVersion:
                          description: 'Specific resourceVersion to which this reference
                          is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
                          type: string
                        uid:
                          description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
                          type: string
                      type: object
                      x-kubernetes-map-type: atomic
                    dataSecretName:
                      description: DataSecretName is the name of the secret that stores
                        the bootstrap data script. If nil, the Machine should remain
                        in the Pending state.
                      type: string
                  type: object
                clusterName:
                  description: ClusterName is the name of the Cluster this object belongs
                    to.
                  minLength: 1
                  type: string
                failureDomain:
                  description: FailureDomain is the failure domain the machine will
                    be created in. Must match a key in the FailureDomains map stored
                    on the cluster object.
                  type: string
                infrastructureRef:
                  description: InfrastructureRef is a required reference to a custom
                    resource offered by an infrastructure provider.
                  properties:
                    apiVersion:
                      description: API version of the referent.
                      type: string
                    fieldPath:
                      description: 'If referring to a piece of an object instead of
                      an entire object, this string should contain a valid JSON/Go
                      field access statement, such as desiredState.manifest.containers[2].
                      For example, if the object reference is to a container within
                      a pod, this would take on a value like: "spec.containers{name}"
                      (where "name" refers to the name of the container that triggered
                      the event) or if no container name is specified "spec.containers[2]"
                      (container with index 2 in this pod). This syntax is chosen
                      only to have some well-defined way of referencing a part of
                      an object. TODO: this design is not final and this field is
                      subject to change in the future.'
                      type: string
                    kind:
                      description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                      type: string
                    name:
                      description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                      type: string
                    namespace:
                      description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
                      type: string
                    resourceVersion:
                      description: 'Specific resourceVersion to which this reference
                      is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
                      type: string
                    uid:
                      description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
                      type: string
                  type: object
                  x-kubernetes-map-type: atomic
                nodeDeletionTimeout:
                  description: NodeDeletionTimeout defines how long the controller will
                    attempt to delete the Node that the Machine hosts after the Machine
                    is marked for deletion. A duration of 0 will retry deletion indefinitely.
                    Defaults to 10 seconds.
                  type: string
                nodeDrainTimeout:
                  description: 'NodeDrainTimeout is the total amount of time that the
                  controller will spend on draining a node. The default value is 0,
                  meaning that the node can be drained without any time limitations.
                  NOTE: NodeDrainTimeout is different from `kubectl drain --timeout`'
                  type: string
                nodeVolumeDetachTimeout:
                  description: NodeVolumeDetachTimeout is the total amount of time that
                    the controller will spend on waiting for all volumes to be detached.
                    The default value is 0, meaning that the volumes can be detached
                    without any time limitations.
                  type: string
                providerID:
                  description: ProviderID is the identification ID of the machine provided
                    by the provider. This field must match the provider ID as seen on
                    the node object corresponding to this machine. This field is required
                    by higher level consumers of cluster-api. Example use case is cluster
                    autoscaler with cluster-api as provider. Clean-up logic in the autoscaler
                    compares machines to nodes to find out machines at provider which
                    could not get registered as Kubernetes nodes. With cluster-api as
                    a generic out-of-tree provider for autoscaler, this field is required
                    by autoscaler to be able to have a provider view of the list of
                    machines. Another list of nodes is queried from the k8s apiserver
                    and then a comparison is done to find out unregistered machines
                    and are marked for delete. This field will be set by the actuators
                    and consumed by higher level entities like autoscaler that will
                    be interfacing with cluster-api as generic provider.
                  type: string
                version:
                  description: Version defines the desired Kubernetes version. This
                    field is meant to be optionally used by bootstrap providers.
                  type: string
              required:
                - bootstrap
                - clusterName
                - infrastructureRef
              type: object
            status:
              description: MachineStatus defines the observed state of Machine.
              properties:
                addresses:
                  description: Addresses is a list of addresses assigned to the machine.
                    This field is copied from the infrastructure provider reference.
                  items:
                    description: MachineAddress contains information for the node's
                      address.
                    properties:
                      address:
                        description: The machine address.
                        type: string
                      type:
                        description: Machine address type, one of Hostname, ExternalIP,
                          InternalIP, ExternalDNS or InternalDNS.
                        type: string
                    required:
                      - address
                      - type
                    type: object
                  type: array
                bootstrapReady:
                  description: BootstrapReady is the state of the bootstrap provider.
                  type: boolean
                certificatesExpiryDate:
                  description: CertificatesExpiryDate is the expiry date of the machine
                    certificates. This value is only set for control plane machines.
                  format: date-time
                  type: string
                conditions:
                  description: Conditions defines current service state of the Machine.
                  items:
                    description: Condition defines an observation of a Cluster API resource
                      operational state.
                    properties:
                      lastTransitionTime:
                        description: Last time the condition transitioned from one status
                          to another. This should be when the underlying condition changed.
                          If that is not known, then using the time when the API field
                          changed is acceptable.
                        format: date-time
                        type: string
                      message:
                        description: A human readable message indicating details about
                          the transition. This field may be empty.
                        type: string
                      reason:
                        description: The reason for the condition's last transition
                          in CamelCase. The specific API may choose whether or not this
                          field is considered a guaranteed API. This field may not be
                          empty.
                        type: string
                      severity:
                        description: Severity provides an explicit classification of
                          Reason code, so the users or machines can immediately understand
                          the current situation and act accordingly. The Severity field
                          MUST be set only when Status=False.
                        type: string
                      status:
                        description: Status of the condition, one of True, False, Unknown.
                        type: string
                      type:
                        description: Type of condition in CamelCase or in foo.example.com/CamelCase.
                          Many .condition.type values are consistent across resources
                          like Available, but because arbitrary conditions can be useful
                          (see .node.status.conditions), the ability to deconflict is
                          important.
                        type: string
                    required:
                      - lastTransitionTime
                      - status
                      - type
                    type: object
                  type: array
                failureMessage:
                  description: "FailureMessage will be set in the event that there is
                  a terminal problem reconciling the Machine and will contain a more
                  verbose string suitable for logging and human consumption. \n This
                  field should not be set for transitive errors that a controller
                  faces that are expected to be fixed automatically over time (like
                  service outages), but instead indicate that something is fundamentally
                  wrong with the Machine's spec or the configuration of the controller,
                  and that manual intervention is required. Examples of terminal errors
                  would be invalid combinations of settings in the spec, values that
                  are unsupported by the controller, or the responsible controller
                  itself being critically misconfigured. \n Any transient errors that
                  occur during the reconciliation of Machines can be added as events
                  to the Machine object and/or logged in the controller's output."
                  type: string
                failureReason:
                  description: "FailureReason will be set in the event that there is
                  a terminal problem reconciling the Machine and will contain a succinct
                  value suitable for machine interpretation. \n This field should
                  not be set for transitive errors that a controller faces that are
                  expected to be fixed automatically over time (like service outages),
                  but instead indicate that something is fundamentally wrong with
                  the Machine's spec or the configuration of the controller, and that
                  manual intervention is required. Examples of terminal errors would
                  be invalid combinations of settings in the spec, values that are
                  unsupported by the controller, or the responsible controller itself
                  being critically misconfigured. \n Any transient errors that occur
                  during the reconciliation of Machines can be added as events to
                  the Machine object and/or logged in the controller's output."
                  type: string
                infrastructureReady:
                  description: InfrastructureReady is the state of the infrastructure
                    provider.
                  type: boolean
                lastUpdated:
                  description: LastUpdated identifies when the phase of the Machine
                    last transitioned.
                  format: date-time
                  type: string
                nodeInfo:
                  description: 'NodeInfo is a set of ids/uuids to uniquely identify
                  the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#info'
                  properties:
                    architecture:
                      description: The Architecture reported by the node
                      type: string
                    bootID:
                      description: Boot ID reported by the node.
                      type: string
                    containerRuntimeVersion:
                      description: ContainerRuntime Version reported by the node through
                        runtime remote API (e.g. containerd://1.4.2).
                      type: string
                    kernelVersion:
                      description: Kernel Version reported by the node from 'uname -r'
                        (e.g. 3.16.0-0.bpo.4-amd64).
                      type: string
                    kubeProxyVersion:
                      description: KubeProxy Version reported by the node.
                      type: string
                    kubeletVersion:
                      description: Kubelet Version reported by the node.
                      type: string
                    machineID:
                      description: 'MachineID reported by the node. For unique machine
                      identification in the cluster this field is preferred. Learn
                      more from man(5) machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html'
                      type: string
                    operatingSystem:
                      description: The Operating System reported by the node
                      type: string
                    osImage:
                      description: OS Image reported by the node from /etc/os-release
                        (e.g. Debian GNU/Linux 7 (wheezy)).
                      type: string
                    systemUUID:
                      description: SystemUUID reported by the node. For unique machine
                        identification MachineID is preferred. This field is specific
                        to Red Hat hosts https://access.redhat.com/documentation/en-us/red_hat_subscription_management/1/html/rhsm/uuid
                      type: string
                  required:
                    - architecture
                    - bootID
                    - containerRuntimeVersion
                    - kernelVersion
                    - kubeProxyVersion
                    - kubeletVersion
                    - machineID
                    - operatingSystem
                    - osImage
                    - systemUUID
                  type: object
                nodeRef:
                  description: NodeRef will point to the corresponding Node if it exists.
                  properties:
                    apiVersion:
                      description: API version of the referent.
                      type: string
                    fieldPath:
                      description: 'If referring to a piece of an object instead of
                      an entire object, this string should contain a valid JSON/Go
                      field access statement, such as desiredState.manifest.containers[2].
                      For example, if the object reference is to a container within
                      a pod, this would take on a value like: "spec.containers{name}"
                      (where "name" refers to the name of the container that triggered
                      the event) or if no container name is specified "spec.containers[2]"
                      (container with index 2 in this pod). This syntax is chosen
                      only to have some well-defined way of referencing a part of
                      an object. TODO: this design is not final and this field is
                      subject to change in the future.'
                      type: string
                    kind:
                      description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                      type: string
                    name:
                      description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                      type: string
                    namespace:
                      description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
                      type: string
                    resourceVersion:
                      description: 'Specific resourceVersion to which this reference
                      is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
                      type: string
                    uid:
                      description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
                      type: string
                  type: object
                  x-kubernetes-map-type: atomic
                observedGeneration:
                  description: ObservedGeneration is the latest generation observed
                    by the controller.
                  format: int64
                  type: integer
                phase:
                  description: Phase represents the current phase of machine actuation.
                    E.g. Pending, Running, Terminating, Failed etc.
                  type: string
              type: object
          type: object
      served: true
      storage: true
      subresources:
        status: {}
